package com.zhiqianbao.push;

import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;

import com.baidu.android.pushservice.PushMessageReceiver;
import com.google.gson.Gson;
import com.zhiqianbao.activity.AttachmentListActivity;
import com.zhiqianbao.activity.BankCardInfoActivity;
import com.zhiqianbao.activity.BeforeRepayActivity;
import com.zhiqianbao.activity.MainActivity;
import com.zhiqianbao.activity.MyCouponActivity;
import com.zhiqianbao.activity.ProgessApplySingleActivity;
import com.zhiqianbao.activity.TakeIdCardMakePicActivity;
import com.zhiqianbao.utils.Constants;
import com.zhiqianbao.utils.HttpUtils;
import com.zhiqianbao.utils.WorthPurseUtil;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.trinea.android.common.util.StringUtils;

/**
 * Created by liang on 2016/1/8.
 */
public class CustomerPushReceiver extends PushMessageReceiver {
    /** TAG to Log */
    public static final String TAG = CustomerPushReceiver.class
            .getSimpleName();
    Gson gson = new Gson();
    /**
     * 调用PushManager.startWork后，sdk将对push
     * server发起绑定请求，这个过程是异步的。绑定请求的结果通过onBind返回。 如果您需要用单播推送，需要把这里获取的channel
     * id和user id上传到应用server中，再调用server接口用channel id和user id给单个手机或者用户推送。
     *
     * @param context
     *            BroadcastReceiver的执行Context
     * @param errorCode
     *            绑定接口返回值，0 - 成功
     * @param appid
     *            应用id。errorCode非0时为null
     * @param userId
     *            应用user id。errorCode非0时为null
     * @param channelId
     *            应用channel id。errorCode非0时为null
     * @param requestId
     *            向服务端发起的请求id。在追查问题时有用；
     * @return none
     */
    @Override
    public void onBind(final Context context, int errorCode, String appid,
                       String userId, final String channelId, String requestId) {
        String responseString = "onBind errorCode=" + errorCode + " appid="
                + appid + " userId=" + userId + " channelId=" + channelId
                + " requestId=" + requestId;
        //4213444880072104925  4216393447317133564  3982609449397086670
       Log.d(TAG, responseString);
            //4321709439249398144
        if (errorCode == 0) {
            // 绑定成功
            Log.d(TAG, "绑定成功");
            //Intent mainIntent = new Intent(context.getApplicationContext(), MainActivity.class);
            //mainIntent.putExtra("channelId", channelId);864324034982396
            //mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //context.getApplicationContext().startActivity(mainIntent);

            /**
             * 不等于空 绑定channelId
             */
          
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //bindChannelId 调用绑定channelId 的接口
                        Map<String, String> params = new HashMap<>();
                        if(Constants.LOGIN_USER==null){
                            return;
                        }
                        params.put("token", Constants.LOGIN_USER != null ? Constants.LOGIN_USER.getToken() : "");
                        params.put("userId", Constants.LOGIN_USER != null ? Constants.LOGIN_USER.getId() + "" : "");
						if (!StringUtils.isBlank(channelId)) {
						Log.d("CustomerPushReceiver", channelId);
                        params.put("channelId", channelId.toString());
						}
                        params.put("deviceType", "3");
                        String result = HttpUtils.httpPostString(Constants.API_ROOT + "/user/bindChannelId", params);
                        if (!StringUtils.isBlank(result)) {
                            Log.d("CustomerPushReceiver", "百度云推送服务器绑定成功");
                        }
                    }
                }).start();

        }

    }

    /**
     * 接收透传消息的函数。
     *
     * @param context
     *            上下文
     * @param message
     *            推送的消息
     * @param customContentString
     *            自定义内容,为空或者json字符串
     */
    @Override
    public void onMessage(Context context, String message,
                          String customContentString) {
        String messageString = "透传消息 message=\"" + message
                + "\" customContentString=" + customContentString;
        Log.d(TAG, messageString);

    }

    /**
     * 接收通知点击的函数。
     *
     * @param context
     *            上下文
     * @param title
     *            推送的通知的标题
     * @param description
     *            推送的通知的描述
     * @param customContentString
     *            自定义内容，为空或者json字符串
     */
    @Override
    public void onNotificationClicked(Context context, String title,
                                      String description, String customContentString) {
        String notifyString = "通知点击 title=\"" + title + "\" description=\""
                + description + "\" customContent=" + customContentString;
        Log.d(TAG, notifyString);
        HashMap<String, String> data = gson.fromJson(customContentString, HashMap.class);

        Context ctx = context.getApplicationContext();
        String type = data.get("type");
        if (StringUtils.isBlank(type)) {
            return;
        }

        final String messageId = data.get("messageId");

        new Thread(new Runnable() {
            @Override
            public void run() {
                Map<String, String> params = new HashMap<>();
                params.put("messageId", messageId);
                try{
                    String result = HttpUtils.httpPostString(Constants.API_ROOT + "/message/changeState", params);
                }catch (Exception e){

                }
//                Log.i(getClass().getSimpleName(), result);
            }
        }).start();

        if (!TextUtils.isEmpty(type)){
            switch (type) {
                /**
                 * 用户审核类型
                 */
                case Constants.USER_INFO_AUDIT_TYPE :
                    startNewPage(ctx, TakeIdCardMakePicActivity.class);
                    break;
                /**
                 * 催收贷款类型
                 */
                case Constants.COLLECTION_LOAN_TYPE :
                    //还款详情
                    startNewPage(ctx, BeforeRepayActivity.class);
                    break;
                /**
                 * 附件提醒类型，到添加附件
                 */
                case Constants.ATTACHMENT_REMIND_TYPE :
                    startNewPage(ctx, AttachmentListActivity.class);
                    break;
                /**
                 * 放款成功提醒
                 */
                case Constants.LOAN_SUCCESS_TYPE :
                    //进度
                    startNewPage(ctx, ProgessApplySingleActivity.class);
                    break;
                /**
                 * 借款审核结论提醒
                 */
                case Constants.LOAN_APPLY_AUDIT_TYPE :
                    //进度
                    startNewPage(ctx, ProgessApplySingleActivity.class);
                    break;
                /**
                 * 通知用户换卡
                 */
                case Constants.NOTICE_USER_CHANGE_CARD_TYPE :
                    startNewPage(ctx, BankCardInfoActivity.class);
                    break;
                /**
                 * 取消用户放款
                 */
                case Constants.CANCEL_USER_LOAN_TYPE :
                    //进度
                    startNewPage(ctx, ProgessApplySingleActivity.class);
                    break;
                case Constants.PUSH_CRM_ACTIVITY_TYPE:
                    //优惠券列表
                    startNewPage(ctx,MyCouponActivity.class);
                    break;
            }
        }

    }

    private void startNewPage(Context ctx, Class clazz) {
        Intent intent = new Intent();
        if (Constants.IS_START) {
            if (Constants.LOGIN_USER != null) {
                intent.setClass(ctx, clazz);
            } else {
                intent.setClass(ctx, MainActivity.class);
            }
        } else {
            intent.setClass(ctx, WorthPurseUtil.getZhiddActivity().getClass());
        }
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ctx.startActivity(intent);
    }

    /**
     * 接收通知到达的函数。
     *
     * @param context
     *            上下文
     * @param title
     *            推送的通知的标题
     * @param description
     *            推送的通知的描述
     * @param customContentString
     *            自定义内容，为空或者json字符串
     */

    @Override
    public void onNotificationArrived(Context context, String title,
                                      String description, String customContentString) {

        String notifyString = "onNotificationArrived  title=\"" + title
                + "\" description=\"" + description + "\" customContent="
                + customContentString;
        Log.d(TAG, notifyString);

        // 自定义内容获取方式，mykey和myvalue对应通知推送时自定义内容中设置的键和值
       /* if (!TextUtils.isEmpty(customContentString)) {
            JSONObject customJson = null;
            try {
                customJson = new JSONObject(customContentString);
                String myvalue = null;
                if (!customJson.isNull("mykey")) {
                    myvalue = customJson.getString("mykey");
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }*/
        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
        // 你可以參考 onNotificationClicked中的提示从自定义内容获取具体值
       // updateContent(context, notifyString);
    }

    /**
     * setTags() 的回调函数。
     *
     * @param context
     *            上下文
     * @param errorCode
     *            错误码。0表示某些tag已经设置成功；非0表示所有tag的设置均失败。
     * @param successTags
     *            设置成功的tag
     * @param failTags
     *            设置失败的tag
     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onSetTags(Context context, int errorCode,
                          List<String> successTags, List<String> failTags, String requestId) {
        String responseString = "onSetTags errorCode=" + errorCode
                + " sucessTags=" + successTags + " failTags=" + failTags
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
        //updateContent(context, responseString);
    }

    /**
     * delTags() 的回调函数。
     *
     * @param context
     *            上下文
     * @param errorCode
     *            错误码。0表示某些tag已经删除成功；非0表示所有tag均删除失败。
     * @param successTags
     *            成功删除的tag
     * @param failTags
     *            删除失败的tag
     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onDelTags(Context context, int errorCode,
                          List<String> successTags, List<String> failTags, String requestId) {
        String responseString = "onDelTags errorCode=" + errorCode
                + " successTags=" + successTags + " failTags=" + failTags
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
       // updateContent(context, responseString);
    }

    /**
     * listTags() 的回调函数。
     *
     * @param context
     *            上下文
     * @param errorCode
     *            错误码。0表示列举tag成功；非0表示失败。
     * @param tags
     *            当前应用设置的所有tag。
     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onListTags(Context context, int errorCode, List<String> tags,
                           String requestId) {
        String responseString = "onListTags errorCode=" + errorCode + " tags="
                + tags;
        Log.d(TAG, responseString);

        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
       // updateContent(context, responseString);
    }

    /**
     * PushManager.stopWork() 的回调函数。
     *
     * @param context
     *            上下文
     * @param errorCode
     *            错误码。0表示从云推送解绑定成功；非0表示失败。
     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onUnbind(Context context, int errorCode, String requestId) {
        String responseString = "onUnbind errorCode=" + errorCode
                + " requestId = " + requestId;
        Log.d(TAG, responseString);

        if (errorCode == 0) {
            // 解绑定成功
            Log.d(TAG, "解绑成功");
        }
        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
        //updateContent(context, responseString);
    }
/*
    private void updateContent(Context context, String content) {
        Log.d(TAG, "updateContent");
        String logText = "" + Utils.logStringCache;

        if (!logText.equals("")) {
            logText += "\n";
        }

        SimpleDateFormat sDateFormat = new SimpleDateFormat("HH-mm-ss");
        logText += sDateFormat.format(new Date()) + ": ";
        logText += content;

        Utils.logStringCache = logText;

        Intent intent = new Intent();
        intent.setClass(context.getApplicationContext(), PushDemoActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.getApplicationContext().startActivity(intent);
    }*/
}
